package com.ruifu.proj.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.common.po.PmPtMain;
import com.ruifu.proj.dto.ptmain.PmPtMainPanelDTO;
import com.ruifu.proj.dto.ptmain.PmPtMainQueryDTO;
import com.ruifu.proj.dto.ptmain.PmPtMainTemplateQueryDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 项目DAO
 * @author lcq
 */
@Mapper
public interface PmPtMainMapper{


    /**
     * 新建
     * @param pmPtMain
     * @param cloudUser
     */
    void insert(@Param("pmPtMain") PmPtMain pmPtMain, @Param("cloudUser") CloudUser cloudUser);


    /*void copy(@Param("pmPtMain") PmPtMain pmPtMain, @Param("cloudUser") CloudUser cloudUser);*/

    /**
     * 新建游离态项目
     * @param pmPtMain
     * @param cloudUser
     */
    Integer insertFree(@Param("pmPtMain") PmPtMain pmPtMain, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 条件查询
     * @param pmPtMainQueryDTO
     * @param cloudUser
     * @return
     */
    List<PmPtMain> findByQuery(@Param("pmPtMainQueryDTO") PmPtMainQueryDTO pmPtMainQueryDTO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 根据id查询
     * @param ptId
     * @return
     */
    PmPtMain findById(Long ptId);

    /**
     * 修改
     * @param pmPtMain
     * @param cloudUser
     */
    void update(@Param("pmPtMain") PmPtMain pmPtMain, @Param("cloudUser") CloudUser cloudUser);

    void updatePmPtMain(@Param("pmPtMain") PmPtMain pmPtMain);

    /**
     * 根据任务编号查询
     * @param ptCode
     * @return
     */
    PmPtMain findByPtCode(String ptCode);

    /**
     * 根据父任务Id查询子任务列表
     * @param ptId
     * @return
     */
    List<PmPtMain> findByPtPId(Long ptId);




    List<PmPtMain> findByPtPIdOrder(Long ptId);


    /**
     * 根据任务id修改项目状态
     * @param pmPtMain
     */
    void updatePtStatusByPtId(PmPtMain pmPtMain);

    /**
     * 指定任务负责人
     * @param ptId
     * @param ptExecuter
     * @param cloudUser
     */
    void updateByExecuter(@Param("ptId") Long ptId, @Param("ptExecuter") Long ptExecuter, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 条件查询模板列表页
     * @param pmPtMainTemplateQueryDTO
     * @param cloudUser
     * @return
     */
    List<PmPtMain> findTemplateByQuery(@Param("pmPtMainTemplateQueryDTO") PmPtMainTemplateQueryDTO pmPtMainTemplateQueryDTO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 查询个人面板条件查询
     * @param pmPtMainPanelDTO
     * @param cloudUser
     * @return
     */
    List<PmPtMain> findPanelByQuery(@Param("pmPtMainPanelDTO") PmPtMainPanelDTO pmPtMainPanelDTO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 根据模板名称查询模板列表
     * @param ptName
     * @param cloudUser
     * @return
     */
    List<PmPtMain> findTemplateListByPtName(@Param("ptName") String ptName, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 选择父任务列表
     * @param ptName
     * @param cloudUser
     * @return
     */
    List<PmPtMain> findParentByPtName(@Param("ptName") String ptName, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 根据项目类型查询项目
     * @param pyId
     * @return
     */
    List<PmPtMain> findByPyId(Long pyId);

    List<PmPtMain> testSelect(@Param("ptId") Long ptId, @Param("cloudUser") CloudUser cloudUser);

    PmPtMain findByPtPIdAndPtOrder(@Param("ptPId")Long ptPId, @Param("lastOrder")String lastOrder);

    List<PmPtMain> findListByPtOrder(@Param("ptOrder")String ptOrder,@Param("cloudUser") CloudUser cloudUser);

    /*List<PmPtMain> findByTenantId(@Param("sourceId")Integer sourceId,@Param("type")String type);*/

}
